//
// Created by Administrator on 2024/4/22.
//

#include <iostream>
#include <vector>
using namespace std;


struct DNode {
    int v;
    DNode * pre;
    DNode * next;
};

// 创建双链表 尾插法 正序
DNode * Dbuild(vector<int> v)
{
    DNode *h=new DNode();
    DNode *cur = h;
    for (int i = 0; i < v.size(); ++i)
    {
        DNode *t = new DNode{v[i],cur,nullptr};
        cur->next=t;
        cur=cur->next;
    }
    return h;
}

// 创建双链表 头插法 倒序
DNode * Dbuild02(vector<int> v)
{
    DNode *h = new DNode();
    DNode *cur = nullptr;
    for (int i = 0; i < v.size(); ++i)
    {
        cur=h->next;
        DNode *t=new DNode{v[i],h,cur};
        // 第一次循环, cur是空的, 所以要判断一下
        if(cur)
            cur->pre=t;
        h->next=t;
    }
    return h;
}

// 打印双链表
void printDLinkedList(DNode *h)
{
    DNode * cur=h->next;
    while(cur)
    {
        cout<<cur->v<<' ';
        cur=cur->next;
    }
}

int main()
{
    vector<int> l{0,1,2,3,4,5};
//    DNode *head = Dbuild(l);  // 尾插
    DNode *head = Dbuild02(l);  // 头插
    printDLinkedList(head);
    return 0;
}